package ctr.eleve;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import jdbc.Connexion;
import metier.Eleve;
import metier.Fonction;
import metier.Grade;
import metier.Stage;
import metier.jdbc.eleve.EleveJdbc;
import vue.MenuControle;
import vue.eleve.JPanModifierEleve;
import configuration.Constante;
import configuration.MessageAppli;
import ctr.util.DateUtil;

public class GestModifierEleve implements ActionListener{

	private JPanModifierEleve jPanModifierEleve;
	
	public GestModifierEleve(JPanModifierEleve jPanModifierEleve) {
		this.jPanModifierEleve = jPanModifierEleve;
	}

	@Override
	public void actionPerformed(ActionEvent actionEvent) {
		
		// Test la provencance de l'action.
		if (actionEvent.getSource() instanceof JButton) {
			JButton jButton = (JButton) actionEvent.getSource();
			if ( Constante.BOUTON_ELEVE_MODIFIER.toString().equals(jButton.getName())){
				try {
					Grade grade = null;
					Stage stage = null;
					String nom = null;
					String prenom = null;
					Fonction fonction = null;
					
					// Test nom
					JTextField jtextNom = jPanModifierEleve.getSaisiNomEleve();
					if (jtextNom.getText().equals("")) {
						throw new Exception("Veuillez remplir le champ Nom");
					}else if (!jtextNom.getText().matches(Constante.REGEX_ALPHANUM)) {
						throw new Exception(MessageAppli.MSG_CHAMPS_ALPHANUM);
					}else{
						nom = jtextNom.getText();
					}
					
					// Test prenom
					JTextField jtextPrenom = jPanModifierEleve.getSaisiPrenomEleve();
					if (jtextPrenom.getText().equals("")) {
						throw new Exception("Veuillez remplir le champ Prenom");
					}else if (!jtextPrenom.getText().matches(Constante.REGEX_ALPHANUM)) {
						throw new Exception(MessageAppli.MSG_CHAMPS_ALPHANUM);
					}else{
						prenom = jtextPrenom.getText();
					}
					
					// Recuperation du Grade
					// Ne peut pas etre null, puisque comboBox. Il y a forcement un grade de séléctionné par défaut.
					if (jPanModifierEleve.getSaisiGradeEleve().getSelectedItem() != null){
						grade = (Grade) jPanModifierEleve.getSaisiGradeEleve().getSelectedItem();
					}
					
					// Recuperation du Stage
					// Ne peut pas etre null, puisque comboBox. Il y a forcement un stage de séléctionné par défaut.
					if (jPanModifierEleve.getSaisiStage().getSelectedItem() != null ){
						stage = (Stage) jPanModifierEleve.getSaisiStage().getSelectedItem();
					}
					
					// Recuperation de la fonction
					// Ne peut pas etre null, puisque comboBox. Il y a forcement un stage de séléctionné par défaut.
					if (jPanModifierEleve.getSaisiFonction().getSelectedItem() != null ){
						fonction = (Fonction) jPanModifierEleve.getSaisiFonction().getSelectedItem();
					}
					
					// Test Date
					Date date = DateUtil.checkDate(Constante.FORMAT_DATE_SHORT, 
							jPanModifierEleve.getSaisiDateNaissanceEleve().getText());
					if ( date == null){
						throw new Exception(MessageAppli.MSG_DATE_MAUVAIS_FORMAT + Constante.FORMAT_DATE_SHORT);
					}
					
					// Ajout si tous ok.
					if ( grade != null && stage != null && date != null && !"".equals(nom) && !"".equals(prenom) && fonction != null ){
						
						Eleve eleve = jPanModifierEleve.getEleve();
						eleve.setNomEleve(nom);
						eleve.setPrenom(prenom);
						eleve.setDateNaissance(date);
						eleve.setIdGrade(grade.getIdGrade());
						eleve.setIdStage(stage.getIdStage());
						eleve.setIdFonction(fonction.getIdFonction());
						jPanModifierEleve.setConfirmerMod(false);
						if ( !EleveJdbc.eleveExiste(Connexion.getConnexion(), eleve)){
							// Ajout en base.
							if ( !EleveJdbc.modifier(Connexion.getConnexion(), eleve) ){
								throw new Exception(MessageAppli.MSG_ELEVE_PB_MODIFICATION);
							}else{
								MenuControle.afficherPan(new JPanModifierEleve(true));
							}
						}else{
							throw new Exception(MessageAppli.MSG_ELEVE_DEJA_EXISTANT);
						}
					}else{
						throw new Exception(MessageAppli.MSG_REMPLIR_CHAMPS);
					}
				}catch (Exception e) {
					e.printStackTrace();
					JOptionPane.showMessageDialog(jPanModifierEleve, e.getMessage(), MessageAppli.MSG_TITRE_ERREUR_SAISIE,
									JOptionPane.WARNING_MESSAGE);
				}
			
			}
		}
	}
}
